package com.duoec.magichour.service;

import com.duoec.magichour.dto.request.ArticleSave;
import com.duoec.magichour.dto.response.ArticleDetailDto;
import com.duoec.magichour.dto.response.ArticleListItemDto;
import com.duoec.magichour.dto.response.UserSimpleInfoDto;

import java.util.List;

/**
 * Created by ycoe on 17/6/25.
 */
public interface ArticleService {
    /**
     * 获取推荐文章
     *
     * @param pageNo   当前分页数，1为第一页
     * @param pageSize 每页最大记录数
     * @return
     */
    List<ArticleListItemDto> getRecommends(long userId, int pageNo, int pageSize);

    /**
     * 获取某个用户收藏的文章
     *
     * @param userId 用户ID
     * @param pageNo   当前分页数，1为第一页
     * @param pageSize 每页最大记录数
     * @return
     */
    List<ArticleListItemDto> getCollection(long userId, int pageNo, int pageSize);

    /**
     * 搜索文章
     *
     * @param userId   当前用户ID
     * @param keyword  搜索关键词
     * @param pageNo   当前分页数，1为第一页
     * @param pageSize 每页最大记录数
     * @return
     */
    List<ArticleListItemDto> searchArticles(long userId, String keyword, int pageNo, int pageSize);

    /**
     * 获取文章详情
     * @param userId 用户ID
     * @param articleId 文章ID
     * @return
     */
    ArticleDetailDto getDetail(long userId, long articleId);

    /**
     * 判断文章ID是否存在
     * @param articleId 文章ID
     * @return
     */
    boolean exists(Long articleId);

    /**
     * 添加文章回复数
     * @param articleId
     */
    void incArticleCommentCount(Long articleId);

    /**
     * 保存文章
     * @param userInfo 用户基本信息
     * @param request 编辑的文章内容
     * @return
     */
    ArticleListItemDto save(UserSimpleInfoDto userInfo, ArticleSave request);

    /**
     * 添加文章收藏数
     * @param articleId 文章ID
     */
    void incArticleCollection(long articleId);

    /**
     * 获取文章作者
     * @param articleId 文章ID
     * @return
     */
    Long getArticleAuthor(long articleId);

    /**
     * 文章评论数-1
     * @param articleId 文章ID
     */
    void decArticleCommentCount(long articleId);

    /**
     * 设置文章分类
     * @param articleCateId 旧的文章分类ID
     * @param newArticleCateId 新的文章分类ID
     */
    void changeArticleCate(int articleCateId, int newArticleCateId);

    /**
     * 获取某个用户{authorUserId}发布的文章
     * @param currentUserId 当前登录的用户ID
     * @param authorUserId 作者user.id
     * @param pageNo 当前页面数，1为第一页
     * @param pageSize 每页最大记录数
     * @return
     */
    List<ArticleListItemDto> getUserArticles(Long currentUserId, long authorUserId, int pageNo, int pageSize);
}
